800CBF80	initialize onhover item name bubble
ADDIU	SP,SP,FFE8
SW	RA,0014 (SP)
LUI	A0,8014
ADDIU	A0,A0,46A0	;A0=801446A0
JAL	8002F4C0	;set A1 bytes at A0 to 0
ADDIU	A1,R0,0028	;A1=28
LUI	AT,8014
JAL	800CC9C4	;set 8 bytes at 801446C8 to 0
SH	R0,46BA (AT)	;0000->801446BA: item#
JAL	800CCE08	;initialize data at 801446D0
NOP
LW	RA,0014 (SP)
ADDIU	SP,SP,0018
JR	RA
NOP

800CBFBC	generate text bubble
	accepts: A0=p->manager
ADDIU	SP,SP,FFA0
SW	RA,001C (SP)
SW	A0,0060 (SP)	;SP+60=A0: p->manager
JAL	800B1C84	;V0=A0+1C90: 
LW	A0,0060 (SP)
LW	A0,0060 (SP)	;A0=p->manager
SW	V0,005C (SP)
ADDIU	AT,R0,0001
LW	T6,1AC0 (A0)	;T6=manager+1AC0: 
OR	V1,R0,R0	;V1=0
BNE	T6,AT,800CC000	;branch if not 1
NOP
LW	T7,1AE4 (A0)	;T7=manager+1AE4: 
SLTI	AT,T7,0015
BNE	AT,R0,800CC000
NOP
ADDIU	V1,R0,0001	;V1=1
//800CC000:
JAL	800CC9EC
SW	V1,0038 (SP)
JAL	800CCE40
LW	A0,0060 (SP)	;A0=p->manager
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
JAL	8007D90C	;V0=80104F94: 
SB	R0,0027 (T0)	;0->bubble+27: reset update flag
BGTZL	V0,800CC3E0	;return if not 0
LW	RA,001C (SP)
JAL	800B5C60
NOP
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
LBU	A1,001C (T0)	;A1=bubble+1C: state
SH	V0,0042 (SP)	;V0->SP+42: item#
SLTIU	AT,A1,0005
BEQ	AT,R0,800CC1A4	;skip if invalid state
OR	A0,A1,R0	;A0=state
SLL	T8,A1,0x2	;T8=state->offset
LUI	AT,8011
ADDU	AT,AT,T8
LW	T8,7B40 (AT)	;T8=80117B40+offset: p->state handler
JR	T8
NOP
//800CC064:	text bubble type 0: blank
ANDI	T9,V0,FFFF
BEQ	T9,R0,800CC1AC
LW	T1,0038 (SP)
BNE	T1,R0,800CC1AC
ADDIU	T2,R0,0001
MTC1	R0,F4
ADDIU	T3,A1,0001
SH	T2,0018 (T0)	;1->bubble+18: set state counter
SB	T3,001C (T0)	;1->bubble+1C: state="minibubble1"
ANDI	A0,T3,00FF	;A0=state
BEQ	R0,R0,800CC1AC
SWC1	F4,0008 (T0)	;0.0->bubble+8: 
//800CC094:	text bubble type 1,2
LH	V0,0018 (T0)	;V0=bubble+18: state counter
ADDIU	T5,R0,0001
ADDIU	T6,A1,0001	;T6=state+1: increment state
SLTIU	V1,V0,0001
ADDIU	T4,V0,FFFF	;T4=count-1
BEQ	V1,R0,800CC1AC	;branch if count not zero
SH	T4,0018 (T0)	;update state counter
SH	T5,0018 (T0)	;1->bubble+18: set state counter
SB	T6,001C (T0)	;update state
BEQ	R0,R0,800CC1AC
ANDI	A0,T6,00FF	;A0=state
//800CC0C0:	text bubble type 3
LUI	AT,3F00
MTC1	AT,F2		;F2=0.5	[3F000000]
LUI	AT,8011
LWC1	F6,7B54 (AT)	;F6=80117B54: 0.3	[3E99999A]
LUI	A0,8014
MFC1	A2,F2		;A2=0.5
MFC1	A3,F2		;A3.0.5
ADDIU	A0,A0,46A8	;A0=bubble+8: 
LUI	A1,3F80		;A1=1.0	[3F800000]
JAL	8009A570
SWC1	F6,0010 (SP)	;SP+10=
LHU	T7,0042 (SP)	;T7=SP+42: item#
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
BEQ	T7,R0,800CC10C	;branch if NULL item
LW	T8,0038 (SP)
ADDIU	AT,R0,0001
BNE	T8,AT,800CC118
NOP
LBU	T9,001C (T0)	;T9=bubble+1C: state
ADDIU	T1,T9,0001	;T1=T9+1: increment state
SB	T1,001C (T0)	;update state
BEQ	R0,R0,800CC1AC
LBU	A0,001C (T0)	;A0=bubble+1C: state
//800CC120:	text bubble type 4
LUI	AT,8011
LWC1	F8,7B58 (AT)	;F8=80117B58: 0.1	[3DCCCCCD]
LUI	A0,8014
LUI	A3,3E4C
ORI	A3,A3,CCCD	;A3=0.2	[3E4CCCCD]
ADDIU	A0,A0,46A8	;A0=bubble+8: 
ADDIU	A1,R0,0000	;A1=0.0
LUI	A2,3F00		;A2=0.5	[3F000000]
JAL	8009A570
SWC1	F8,0010 (SP)
LUI	AT,8011
LWC1	F0,7B5C (AT)	;F0=80117B5C: 0.01	[3C23D70A]
LUI	AT,3F00
MTC1	AT,F2		;F2=0.5	[3F000000]
LUI	A0,8014
MFC1	A3,F0		;A3=F0: 0.01
MFC1	A2,F2		;A2=F2: 0.5
ADDIU	A0,A0,46A8	;A0=bubble+8: 
ADDIU	A1,R0,0000	;A1=0.0
JAL	8009A570
SWC1	F0,0010 (SP)
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
LUI	AT,8011
LWC1	F16,7B60 (AT)	;F16=80117B60: 0.01	[3C23D70A]
LWC1	F10,0008 (T0)	;F10=bubble+8: 
C.LT.S	F10,F16
NOP
BC1F	800CC19C
NOP
SB	R0,001C (T0)	;0->bubble+1C: state="blank"
BEQ	R0,R0,800CC1AC
LBU	A0,001C (T0)	;A0=bubble+1C: state
//800CC1A4:	default
SB	R0,001C (T0)	;0->bubble+1C: state="blank"
ANDI	A0,R0,00FF	;A0=0
//800CC1AC:	generic code for above text bubble constructors
BEQ	A0,R0,800CC3DC
LW	T2,005C (SP)
LW	T4,0028 (T2)
ADDIU	A1,SP,0050
LUI	AT,41F0
SW	T4,0000 (A1)
LW	T3,002C (T2)
MTC1	AT,F4		;F4=30.0	[41F00000]
ADDIU	A2,SP,0044
SW	T3,0004 (A1)
LW	T4,0030 (T2)
SW	T4,0008 (A1)
LWC1	F18,0054 (SP)
LHU	T5,0042 (SP)	;T5=SP+42: item#
LW	A0,0060 (SP)	;A0=p->manager
ADD.S	F6,F18,F4
SW	T5,0028 (SP)	;SP+28=T5: item#
JAL	8009B0AC
SWC1	F6,0054 (SP)
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
LBU	A0,001C (T0)	;A0=bubble+1C: state
SLTI	AT,A0,0004
BEQ	AT,R0,800CC2F8
LUI	AT,3F80
MTC1	AT,F2		;F2=1.0	[3F800000]
LUI	AT,4348
MTC1	AT,F8		;F8=200.0	[43480000]
LWC1	F10,0044 (SP)
SWC1	F2,000C (T0)	;1.0->bubble+C: 
LWC1	F4,0044 (SP)
C.LT.S	F8,F10
LUI	AT,42F0
BC1FL	800CC24C
MTC1	AT,F18		;F18=120.0	[42F00000]
LUI	AT,BF80
MTC1	AT,F16		;F16=-1.0	[BF800000]
BEQ	R0,R0,800CC27C
SWC1	F16,000C (T0)	;-1.0->bubble+C: 
//800CC248:
MTC1	AT,F18		;F18=120.0	[42F00000]
LW	T6,005C (SP)
C.LT.S	F18,F4
NOP
BC1FL	800CC280
LUI	AT,4288
LH	T7,00DE (T6)
LUI	AT,BF80
BLTZL	T7,800CC280
LUI	AT,4288
MTC1	AT,F6		;F6=-1.0	[BF800000]
NOP
SWC1	F6,000C (T0)	;-1.0->bubble+C
//800CC27C:
LUI	AT,4288
LWC1	F0,0048 (SP)
MTC1	AT,F8		;F8=68.0	[42880000]
SWC1	F2,0010 (T0)
LUI	AT,BF80
C.LT.S	F0,F8
NOP
BC1FL	800CC2B0
LUI	AT,C220
MTC1	AT,F10		;F10=-1.0	[BF800000]
NOP
SWC1	F10,0010 (T0)	;-1.0->bubble+10
//800CC2AC:
LUI	AT,C220
MTC1	AT,F16		;F16=-40.0	[C2200000]
LWC1	F18,000C (T0)	;F18=bubble+C: 
LUI	AT,4320
MTC1	AT,F6		;F6=160.0	[43200000]
MUL.S	F4,F16,F18	;F4= F18 * -40.0
LUI	AT,4228
MTC1	AT,F18		;F18=42.0	[42280000]
LWC1	F10,0044 (SP)
LUI	AT,42F0
ADD.S	F8,F4,F6	;F8=160.0 + (F18 * -40.0)
LWC1	F4,0010 (T0)	;F4=bubble+10: 
MUL.S	F6,F18,F4	;F6=42.0 * F4
SUB.S	F16,F10,F8	;F16=F10 - (160.0 + (F18 * -40.0))
MTC1	AT,F10		;F10=120.0	[42F00000]
SWC1	F16,0000 (T0)
ADD.S	F8,F6,F10	;F8= (42.0 * F4) + 120.0
SUB.S	F16,F0,F8
SWC1	F16,0004 (T0)
//800CC2F8:
LW	T8,0028 (SP)	;T8=SP+28: item#
BEQL	T8,R0,800CC378	;branch if NULL item
SH	R0,001A (T0)	;0000->bubble+1A: set item#
LHU	V0,001A (T0)	;V0=bubble+1A: item#
LUI	A0,8014
LHU	T9,0042 (SP)	;T9=SP+42: item#
BNE	T8,V0,800CC320	;branch if onhover item differs from displayed item
ADDIU	A0,A0,46BD	;A0=bubble+1D: p->text
BNE	V0,R0,800CC32C	;branch if displayed item not NULL
NOP
//800CC320:	retrieve item name from ROM
SH	T9,001A (T0)	;T9->bubble+1A: item#
JAL	80096740	;copy item A1's name from ROM to A0
LHU	A1,0042 (SP)	;A1=SP+42: item#
//800CC32C:	determine actual strlen
LUI	A0,8014
ADDIU	A0,A0,46BD	;A0=bubble+1D: p->text
ADDIU	A1,R0,000A	;A1=strlen A
JAL	8009C1C0	;V0=actual strlen of A0, of size A1, ignoring character A2
ADDIU	A2,R0,0020	;A2=20: ' '
//800CC340:	figure baloon expansion
MTC1	V0,F18
LUI	AT,4000
MTC1	AT,F6		;F6=2.0	[40000000]
CVT.S.W	F4,F18	;F4=(float) strlen
LUI	AT,4100
MTC1	AT,F8		;F8=8.0	[41000000]
LUI	T0,8014
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
SUB.S	F10,F4,F6	;F10=strlen-2.0: account for min bubble size
DIV.S	F16,F10,F8	;F16=(strlen-2.0)/8.0
SWC1	F16,0014 (T0)	;F16->bubble+14: proportion of max size(?)
BEQ	R0,R0,800CC378
LBU	A0,001C (T0)	;A0=bubble+1C: state
//800CC374:
SH	R0,001A (T0)	;0000->bubble+1A: blank item#
//800CC378:
BEQL	A0,R0,800CC3E0	;return if state 0: blank
LW	RA,001C (SP)
JAL	80087C88	;V0= halfword at 8014A248
NOP
LUI	T0,8014
ANDI	T1,V0,F000
BNE	T1,R0,800CC3B0
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
JAL	8007D7BC
NOP
LUI	T0,8014
ADDIU	AT,R0,0001
BNE	V0,AT,800CC3D4
ADDIU	T0,T0,46A0	;T0=801446A0: p->bubble.data
//800CC3B0:
LUI	T2,8013
LBU	T2,6EA1 (T2)	;T2=80136EA1: 
ADDIU	AT,R0,0001
LW	T3,0028 (SP)	;T3=SP+28: item#
BNE	T2,AT,800CC3DC
SLTI	AT,T3,1000
BNE	AT,R0,800CC3D4	;branch if item# < 1000
SLTI	AT,T3,1ECD
BNE	AT,R0,800CC3DC	;return if valid 1xxx item
//800CC3D4:
ADDIU	T4,R0,0001
SB	T4,0027 (T0)	;1->bubble+27: resize flag
//800CC3DC:	return
LW	RA,001C (SP)
ADDIU	SP,SP,0060
JR	RA
NOP

800CC3EC
ADDIU	SP,SP,FF48
SW	RA,0044 (SP)
SW	S0,0040 (SP)
LW	V1,0000 (A0)
LW	V0,029C (V1)
ADDIU	V0,V0,FFC0
SW	V0,029C (V1)
SW	A0,00B8 (SP)
SW	V0,004C (SP)
JAL	800CCB44
SW	V1,00B0 (SP)
LW	S0,004C (SP)
JAL	800CD194
LW	A0,00B8 (SP)
LUI	T6,8014
LBU	T6,46C7 (T6)	;T6=bubble+27: update flag
BEQL	T6,R0,800CC9B4	;return if not updating
LW	RA,0044 (SP)
BEQ	S0,R0,800CC494
LUI	AT,3F80
MTC1	AT,F0		;F0=1.0	[3F800000]
LUI	AT,44F0
MTC1	AT,F4		;F4=7680.0	[45F00000]
LUI	AT,44FA
MTC1	AT,F6		;F6=2000.0	[44FA0000]
OR	A0,S0,R0	;A0=S0: p->target
LUI	A1,C520		;A1=-2560.0	[C5200000]
LUI	A2,4520		;A2= 2560.0	[45200000]
LUI	A3,C4F0		;A3=-7680.0	[C5F00000]
SWC1	F0,0014 (SP)	;SP+14=1.0
SWC1	F0,001C (SP)	;SP+1C=1.0
SWC1	F4,0010 (SP)	;SP+10=7680.0
JAL	80036814
SWC1	F6,0018 (SP)	;SP+18=2000.0
LW	T7,00B0 (SP)
LUI	T9,DA38
ORI	T9,T9,0007	;T9=DA380007
LW	V1,02B8 (T7)	;V1=T7+2B8: p->DL
ADDIU	T8,V1,0008	;T8=V1+8: next DL
SW	T8,02B8 (T7)	;update p->DL
SW	S0,0004 (V1)	;S0->DL+4: matrix.l: p->data
SW	T9,0000 (V1)	;T9->DL+0: matrix.u: projection, load, replace
//800CC494:
LUI	AT,4180
MTC1	AT,F12		;F12=16.0	[41800000]
OR	A3,R0,R0	;A3=0
MFC1	A2,F12		;A2=16.0
JAL	800E041C	;multiply matrix
MOV.S	F14,F12
LUI	V0,8014
ADDIU	V0,V0,46A0	;V0=801446A0: p->bubble.data
LWC1	F14,0004 (V0)	;F14=bubble+4: 
LWC1	F12,0000 (V0)	;F12=bubble+0: 
ADDIU	A2,R0,0000	;A2=0
ADDIU	A3,R0,0001	;A3=1
JAL	800E0314	;does some kind of matrix conversion
NEG.S	F14,F14		;-F14
LW	A0,00B0 (SP)
LUI	T0,DA38
ORI	T0,T0,0003	;T0=DA380003
LW	S0,02B8 (A0)	;S0=A0+2B8: p->DL
OR	V1,S0,R0	;V1=S0: p->DL
SW	T0,0000 (V1)	;T0->DL+0: matrix.u: model, load, replace
SW	V1,008C (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,008C (SP)
LUI	T1,DE00
LUI	T2,0401
SW	V0,0004 (V1)	;V0->DL+4: matrix.l: p->data
OR	V0,S0,R0	;V0=S0: p->DL
ADDIU	T2,T2,C3D8	;T2=0400C3D8: JAL 80187B00
SW	T2,0004 (V0)	;T2->DL+4: displaylist.l: j->DL
SW	T1,0000 (V0)	;T1->DL+0: displaylist.u
ADDIU	S0,S0,0008	;S0+=8: next DL
LUI	V1,E700
OR	V0,S0,R0	;V0=S0: p->DL
SW	V1,0000 (V0)	;V1->DL+0: pipesync.u
SW	R0,0004 (V0)	;R0->DL+4: pipesync.l
ADDIU	S0,S0,0008	;S0+=8: next DL
OR	V0,S0,R0	;V0=S0: p->DL
LUI	T3,E200
LUI	T4,0C18
ORI	T4,T4,4340	;T4=0C184340
ORI	T3,T3,001C	;T3=E200001C
SW	T3,0000 (V0)	;T3->DL+0: setothermode_l.u: 
SW	T4,0004 (V0)	;T4->DL+4: setothermode_l.l: 
ADDIU	S0,S0,0008	;S0+=8: next DL
//800CC548:	drawn appropriate bubbles
LUI	V0,8014
LBU	V0,46BC (V0)	;V0=bubble+1C: state
ADDIU	AT,R0,0001
BEQ	V0,AT,800CC698	;branch if state 1: "minibubble1"
ADDIU	AT,R0,0002
BEQ	V0,AT,800CC60C	;branch if state 2: "minibubble2"
ADDIU	AT,R0,0003
BEQ	V0,AT,800CC57C	;branch if state 3: "open"
ADDIU	AT,R0,0004
BEQ	V0,AT,800CC72C	;branch if state 4: "closing"
NOP
BEQ	R0,R0,800CC884	;branch if closed
LUI	AT,3F80
//800CC57C:	state 3: text bubble open
JAL	800E020C	;copy current matrix to next slot as set A0=p->new
NOP
LUI	AT,8014
LWC1	F14,46A8 (AT)	;F14=bubble+8: 
LUI	AT,8011
LWC1	F8,7B64 (AT)	;F8=80117B64: 0.666667	[3F2AAAB0]
LUI	AT,8014
LWC1	F10,46B4 (AT)	;F10=bubble+14: bubble width percentage
LUI	AT,8011
LWC1	F18,7B68 (AT)	;F18=80117B68: 0.333333	[3EAAAA9F]
MUL.S	F16,F8,F10	;F16=2/3 * width%
MFC1	A2,F14		;A2=F14: 
ADDIU	A3,R0,0001	;A3=1
ADD.S	F4,F16,F18	;F4=1/3 + 2/3 * width%
MUL.S	F12,F4,F14	;F12=(1/3 + 2/3 * width%) * 
JAL	800E041C	;multiply matrix
NOP
LUI	T5,DA38
ORI	T5,T5,0003	;T5=DA380003
OR	V1,S0,R0	;V1=S0: p->DL
SW	T5,0000 (V1)	;T5->DL+0: matrix.u: model, load, replace
SW	V1,007C (SP)
LW	A0,00B0 (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,007C (SP)
SW	V0,0004 (V1)	;V0->DL+4: matrix.l: p->data
JAL	800E0244	;use previous matrix
NOP
OR	V0,S0,R0	;V0=S0: p->DL
LUI	T8,0401
ADDIU	T8,T8,C250	;T8=0401C250: JAL 80384A00
LUI	T6,DE00
SW	T6,0000 (V0)	;T6->DL+0: displaylist.u
SW	T8,0004 (V0)	;T8->DL+4: displaylist.l: j->80384A00
ADDIU	S0,S0,0008	;S0+=8: next DL
//800CC60C:	state 2: minibubble 2 open
JAL	800E020C	;copy current matrix to next slot as set A0=p->new
NOP
LUI	AT,8014
LWC1	F6,46AC (AT)	;F6=bubble+C: 
LUI	AT,BF80
MTC1	AT,F8		;F8=-1.0	[BF800000]
LUI	AT,8014
LWC1	F10,46B0 (AT)	;F10=bubble+10: 
LUI	AT,C1A0
MTC1	AT,F16		;F16=-20.0	[C1A00000]
MUL.S	F12,F6,F8
ADDIU	A2,R0,0000
ADDIU	A3,R0,0001
MUL.S	F14,F10,F16
JAL	800E0314
NOP
LUI	T7,DA38
ORI	T7,T7,0003
OR	V1,S0,R0
SW	T7,0000 (V1)
SW	V1,0074 (SP)
LW	A0,00B0 (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,0074 (SP)
SW	V0,0004 (V1)
JAL	800E0244	;use previous matrix
NOP
OR	V0,S0,R0	;V0=S0: p->DL
LUI	T0,0401
ADDIU	T0,T0,C358
LUI	T9,DE00
SW	T9,0000 (V0)
SW	T0,0004 (V0)
ADDIU	S0,S0,0008	;S0+=8: next DL
//800CC698:	state 1: minibubble 1 open
JAL	800E020C	;copy current matrix to next slot as set A0=p->new
NOP
LUI	AT,8014
LWC1	F18,46AC (AT)	;F18=bubble+C: 
LUI	AT,C150
MTC1	AT,F4		;F4=-13.0	[C1500000]
LUI	AT,8014
LWC1	F6,46B0 (AT)	;F6=bubble+10: 
LUI	AT,C1F0
MTC1	AT,F8		;F8=-30.0	[C1F00000]
MUL.S	F12,F18,F4
ADDIU	A2,R0,0000
ADDIU	A3,R0,0001
MUL.S	F14,F6,F8
JAL	800E0314	;does some kind of matrix conversion
NOP
LUI	T1,DA38
ORI	T1,T1,0003
OR	V1,S0,R0
SW	T1,0000 (V1)
SW	V1,006C (SP)
LW	A0,00B0 (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,006C (SP)
SW	V0,0004 (V1)
JAL	800E0244	;use previous matrix
NOP
OR	V0,S0,R0	;V0=S0: p->DL
LUI	T3,0401
ADDIU	T3,T3,C2D8
LUI	T2,DE00
SW	T2,0000 (V0)
SW	T3,0004 (V0)
ADDIU	S0,S0,0008	;S0+=8: next DL
BEQ	R0,R0,800CC884
LUI	AT,3F80
//800CC72C:	state 4: closing
LUI	AT,8014
LWC1	F10,46A8 (AT)	;F10=bubble+8: 
LUI	AT,437F
MTC1	AT,F16		;F16=255.0	[437F0000]
ADDIU	A0,R0,0001
OR	V0,S0,R0	;V0=S0: p->DL
MUL.S	F18,F10,F16
ADDIU	S0,S0,0008	;S0+=8: next DL
CFC1	T4,F31
CTC1	A0,F31
NOP
CVT.W.S	F4,F18
CFC1	A0,F31
NOP
ANDI	A0,A0,0078
BEQ	A0,R0,800CC7B4
LUI	AT,4F00
MTC1	AT,F4		;F4=0x80000000	[4F000000]
ADDIU	A0,R0,0001
SUB.S	F4,F18,F4
CTC1	A0,F31
NOP
CVT.W.S	F4,F4
CFC1	A0,F31
NOP
ANDI	A0,A0,0078
BNE	A0,R0,800CC7AC
NOP
MFC1	A0,F4
LUI	AT,8000
BEQ	R0,R0,800CC7C4
OR	A0,A0,AT
BEQ	R0,R0,800CC7C4
ADDIU	A0,R0,FFFF
MFC1	A0,F4
NOP
BLTZ	A0,800CC7AC
NOP
CTC1	T4,F31
ANDI	A0,A0,00FF
LUI	AT,FA00
SW	V1,0000 (V0)
SW	R0,0004 (V0)
ANDI	V1,A0,00FF
OR	T5,V1,AT
OR	V0,S0,R0	;V0=S0: p->DL
ADDIU	AT,R0,D700
OR	T6,V1,AT
SW	T6,0004 (V0)
SW	T5,0000 (V0)
ADDIU	S0,S0,0008	;S0+=8: next DL
JAL	800E020C	;copy current matrix to next slot as set A0=p->new
NOP
LUI	AT,8011
LWC1	F6,7B6C (AT)	;F6=80117B6C: 0.666667	[3F2AAAB0]
LUI	AT,8014
LWC1	F8,46B4 (AT)	;F8=bubble+14: bubble width percentage
LUI	AT,8011
LWC1	F16,7B70 (AT)	;F16=80117B70: 0.333333	[3EAAAA9F]
MUL.S	F10,F6,F8	;F10=2/3 width%
LUI	AT,3F80
MTC1	AT,F14		;F14=1.0	[3F800000]
LUI	A2,3F80
ADDIU	A3,R0,0001
JAL	800E041C	;multiply matrix
ADD.S	F12,F10,F16	;F12= 1/3 + 2/3 width%
LUI	T8,DA38
ORI	T8,T8,0003
OR	V1,S0,R0
SW	T8,0000 (V1)
SW	V1,005C (SP)
LW	A0,00B0 (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,005C (SP)
SW	V0,0004 (V1)
JAL	800E0244	;use previous matrix
NOP
OR	V0,S0,R0	;V0=S0: p->DL
LUI	T9,0401
ADDIU	T9,T9,C1D0
LUI	T7,DE00
SW	T7,0000 (V0)
SW	T9,0004 (V0)
ADDIU	S0,S0,0008	;S0+=8: next DL
LUI	AT,3F80
MTC1	AT,F12		;F12=1.0	[3F800000]
OR	A3,R0,R0	;A3=0
MFC1	A2,F12		;A2=1.0
JAL	800E041C	;multiply matrix
MOV.S	F14,F12
LUI	T0,DA38
ORI	T0,T0,0003	;T0=DA380003
OR	V1,S0,R0	;V1=S0: p->DL
SW	T0,0000 (V1)	;T0->DL+0: matrix.u: model, load, replace
SW	V1,0054 (SP)
LW	A0,00B0 (SP)
JAL	800E13C4
ADDIU	S0,S0,0008	;S0+=8: next DL
LW	V1,0054 (SP)
SW	V0,0004 (V1)	;V0->DL+4: matrix.l: p->data
LW	T1,00B0 (SP)
SW	S0,02B8 (T1)	;S0->T1+2B8: update p->DL
LUI	V0,8014
ADDIU	V0,V0,46A0	;V0=801446A0: p->bubble.data
LBU	T2,001C (V0)	;T2=bubble+1C: state
SLTI	AT,T2,0003
BNE	AT,R0,800CC9B0	;branch if state 0-2: main bubble not open
LUI	AT,3F00
MTC1	AT,F4		;F4=0.5	[3F000000]
LWC1	F18,0008 (V0)	;F18=bubble+8: 
MTC1	R0,F6
LUI	AT,3F60
SUB.S	F0,F18,F4
ADD.S	F2,F0,F0
C.LT.S	F6,F2
NOP
BC1FL	800CC9B4
LW	RA,0044 (SP)
MTC1	AT,F0		;F0=0.875	[3F600000]
LUI	AT,42D6
MTC1	AT,F10		;F10=107.0	[42D60000]
LUI	AT,3F80
MTC1	AT,F18		;F18=1.0	[3F800000]
LWC1	F8,0000 (V0)	;F8=bubble+0: 
LWC1	F4,0014 (V0)	;F4=bubble+14: 
LUI	AT,422C
ADD.S	F16,F8,F10
MTC1	AT,F8		;F8=43.0	[422C0000]
LUI	AT,42E2
SUB.S	F6,F18,F4	;F6=1.0-width%
LWC1	F4,0004 (V0)	;F4=bubble+4: 
LUI	A1,8014
ADDIU	T3,R0,002D
MUL.S	F10,F6,F8	;F10=1-width% * 43.0
MTC1	AT,F6		;F6=113.0	[42E20000]
LUI	AT,437F
ADDIU	T4,R0,002D
ADDIU	T5,R0,0023
ADD.S	F8,F4,F6	;F6=113.0+F4: 
ADDIU	T7,R0,0001
SW	T7,0034 (SP)	;SP+34=1
ADD.S	F18,F16,F10
MTC1	AT,F16		;F16=255.0	[437F0000]
SWC1	F8,0010 (SP)	;SP+10=F8: (float) ypos
SW	T5,001C (SP)	;SP+1C=23: blue
MUL.S	F10,F16,F2	;F10=255.0 * F2: (float) alpha
MFC1	A3,F18		;A3=F18: (float) xpos
SW	T4,0018 (SP)	;SP+18=2D: green
SW	T3,0014 (SP)	;SP+14=2D: red
ADDIU	A1,A1,46BD	;A1=bubble+1D: p->text
LW	A0,00B8 (SP)
ADDIU	A2,R0,000A	;A2=strlen A
TRUNC.W.S	F18,F10	;F18=F10: (long) alpha
SW	R0,0024 (SP)	;SP+24=0
SW	R0,0028 (SP)	;SP+28=0
SWC1	F0,002C (SP)	;SP+2C=0.875
MFC1	T8,F18		;T8=F18: alpha
SWC1	F0,0030 (SP)	;SP+30=0.875
JAL	80090E98	;print text to screen
SW	T8,0020 (SP)	;SP+20=T8: alpha
//800CC9B0:	return
LW	RA,0044 (SP)
LW	S0,0040 (SP)
ADDIU	SP,SP,00B8
JR	RA
NOP
